5.01. Встроенные типы ошибок
Встроенные типы ошибок
Стандарт ECMAScript определяет встроенные типы ошибок, но пользовательские ошибки могут быть любыми значениями (в том числе строками или объектами). Однако для согласованности и совместимости рекомендуется использовать только экземпляры Error или его подклассов.
Встроенные типы ошибок в JavaScript (ECMAScript 2025)
Все они являются конструкторами и наследуются от глобального класса Error.
Основные встроенные типы ошибок:
Error— базовый класс для всех ошибок.EvalError— ошибка, связанная с функциейeval()(в современном коде почти не используется).RangeError— возникает при передаче значения вне допустимого диапазона (например,new Array(-1)).ReferenceError— возникает при обращении к несуществующей переменной в текущей области видимости.SyntaxError— возникает при разборе синтаксически некорректного кода (например, вJSON.parseилиeval).TypeError— возникает при операции с несовместимым типом (например, вызов нефункции:"hello"()).URIError— возникает при использовании функцийencodeURI,decodeURI,encodeURIComponent,decodeURIComponentс недопустимыми аргументами.
Дополнительные ошибки в средах выполнения:
Эти ошибки не определены в спецификации ECMAScript, но широко поддерживаются в браузерах и Node.js:
AggregateError— используется для представления нескольких ошибок одновременно (например, вPromise.any()).DOMException— ошибка, генерируемая API DOM (в браузерах). Не является подклассомError, но содержит поляnameиmessage.WebAssembly.CompileError,WebAssembly.LinkError,WebAssembly.RuntimeError— специфичные ошибки WebAssembly.
Иерархия (упрощённо):
Error
├── EvalError
├── RangeError
├── ReferenceError
├── SyntaxError
├── TypeError
├── URIError
└── AggregateError
DOMExceptionи ошибки WebAssembly не наследуются отErrorв строгом смысле, но используются аналогично.
Примечания:
- В отличие от Python, JavaScript не имеет встроенных исключений вроде
IndexErrorилиKeyError. Ошибки при работе с массивами или объектами обычно проявляются какTypeError(например, при попытке вызвать метод уundefined) или молча возвращаютundefined. - Проверка типа ошибки выполняется через свойство
.nameили операторinstanceof:try {
// ...
} catch (e) {
if (e instanceof TypeError) { /* ... */ }
} - В Node.js также могут возникать системные ошибки (
SystemError), но они представлены как объекты с полямиcode(например,'ENOENT') и не являются отдельными классами.
Как получить список программно (в среде, поддерживающей globalThis):
const errorTypes = [
'Error',
'EvalError',
'RangeError',
'ReferenceError',
'SyntaxError',
'TypeError',
'URIError',
'AggregateError'
].filter(name => typeof globalThis[name] === 'function');
console.log(errorTypes);
Этот подход корректно работает в современных браузерах и Node.js 15+.